package com.gradumate.shared;

import java.util.ArrayList;

import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.gwt.user.client.rpc.IsSerializable;
import com.gradumate.server.AlfrescoInfo;

/**
 * @author hugozonderland
 *
 */
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Gebruiker implements IsSerializable {
	
	public static final Integer TYPE_STUDENT = 1;
	public static final Integer TYPE_AFSTUDEER_ADMINISTRATIE = 2;
	public static final Integer TYPE_AFSTUDEERCOMMISIE_VOORZITTER = 3;
	public static final Integer TYPE_AFSTUDEERCOMMISSIE_LID = 4;
	public static final Integer TYPE_AFSTUDEER_COORDINATOR = 5;
	public static final Integer TYPE_STUDIE_ADVISEUR = 6;
	public static final Integer TYPE_TEAMLEIDER_PERSONEELSZAKEN = 7;
	
	@Persistent
	@PrimaryKey
	private String gebruikerEmail;
	@Persistent
	private String voornaam;
	@Persistent
	private String achternaam;
	@Persistent
	private int type;
	@Persistent
	private int studentNummer;
	@Persistent
	private String faculteit; // is site
	@Persistent
	private String instituut;
	@Persistent
	private ArrayList<String> opleidingen;
	@Persistent
	private int inschrijfjaar;
	@Persistent
	private boolean heeftToegang;
	@Persistent
	private String afstudeervoorstelItemID;
	@Persistent
	private boolean mailOntvangen;
	
	
	/**
	 * @return the afstudeervoorstelItemID
	 */
	public String getAfstudeervoorstelItemID() {
		return afstudeervoorstelItemID;
	}

	/**
	 * @param afstudeervoorstelItemID the afstudeervoorstelItemID to set
	 */
	public void setAfstudeervoorstelItemID(String afstudeervoorstelItemID) {
		this.afstudeervoorstelItemID = afstudeervoorstelItemID;
	}

	private String ticket;
	
	public Gebruiker() {
		opleidingen = new ArrayList<String>();
	}
	
	/**
	 * @param gebruikerEmail the gebruikerEmail to set
	 */
	public void setGebruikerEmail(String gebruikerEmail) {
		this.gebruikerEmail = gebruikerEmail;
	}
	
	/**
	 * @return the gebruikerEmail
	 */
	public String getGebruikerEmail() {
		return gebruikerEmail;
	}

	/**
	 * @param voornaam the voornaam to set
	 */
	public void setVoornaam(String voornaam) {
		this.voornaam = voornaam;
	}

	/**
	 * @return the voornaam
	 */
	public String getVoornaam() {
		return voornaam;
	}

	/**
	 * @param achternaam the achternaam to set
	 */
	public void setAchternaam(String achternaam) {
		this.achternaam = achternaam;
	}

	/**
	 * @return the achternaam
	 */
	public String getAchternaam() {
		return achternaam;
	}

	/**
	 * @param type the type to set
	 */
	public void setType(int type) {
		this.type = type;
	}

	/**
	 * @return the type
	 */
	public int getType() {
		return type;
	}

	/**
	 * @return the studentNummer
	 */
	public int getStudentNummer() {
		return studentNummer;
	}

	/**
	 * @param studentNummer the studentNummer to set
	 */
	public void setStudentNummer(int studentNummer) {
		this.studentNummer = studentNummer;
	}

	/**
	 * @return the instituut
	 */
	public String getInstituut() {
		return instituut;
	}

	/**
	 * @param instituut the instituut to set
	 */
	public void setInstituut(String instituut) {
		this.instituut = instituut;
	}

	/**
	 * @return the opleiding
	 */
	public ArrayList<String> getOpleiding() {
		return opleidingen;
	}

	/**
	 * @param opleiding the opleiding to set
	 */
	public void setOpleiding(ArrayList<String> opleidingen) {
		this.opleidingen = opleidingen;
	}
	
	/**
	 * Voegt een opleiding toe aan de array
	 * @param String met opleiding
	 */
	public void addOpleiding(String opleiding) {
		this.opleidingen.add(opleiding);
	}

	/**
	 * @return the heeftToegang
	 */
	public boolean isHeeftToegang() {
		return heeftToegang;
	}

	/**
	 * @param heeftToegang the heeftToegang to set
	 */
	public void setHeeftToegang(boolean heeftToegang) {
		this.heeftToegang = heeftToegang;
	}

	/**
	 * @return the faculteit
	 */
	public String getFaculteit() {
		return faculteit;
	}

	/**
	 * @param faculteit the faculteit to set
	 */
	public void setFaculteit(String faculteit) {
		this.faculteit = faculteit;
	}

	/**
	 * @return the inschrijfjaar
	 */
	public int getInschrijfjaar() {
		return inschrijfjaar;
	}

	/**
	 * @param inschrijfjaar the inschrijfjaar to set
	 */
	public void setInschrijfjaar(int inschrijfjaar) {
		this.inschrijfjaar = inschrijfjaar;
	}
	
	/**
	 * @return the ticket
	 */
	public String getTicket() {
		return ticket;
	}

	/**
	 * @param ticket the ticket to set
	 */
	public void setTicket(String ticket) {
		this.ticket = ticket;
	}

	/**
	 * Bouwt een string op om met de map van de student op Alfresco te kunnen communiceren.
	 * @param String sub, wanneer je in een submap van de gebruiker moet dan sub gebruiken
	 * @return String met url
	 */
	public String getStudentFolderUrl(String sub) {
		if (sub == null) sub = "";
		return AlfrescoInfo.MY_ALFRESO + "/s/cmis/p/sites/" + this.getFaculteit().toLowerCase() + "/documentLibrary/" + this.getInstituut() + "/" + this.getOpleiding().get(0) + "/" + this.getInschrijfjaar() + "/" + this.getGebruikerEmail() + sub  + "/children" + ticket;
	}

	/**
	 * @return the mailOntvangen
	 */
	public boolean isMailOntvangen() {
		return mailOntvangen;
	}

	/**
	 * @param mailOntvangen the mailOntvangen to set
	 */
	public void setMailOntvangen(boolean mailOntvangen) {
		this.mailOntvangen = mailOntvangen;
	}
}
